# 基础数据类型
# float
f1 = float(3.1)
f2 = float("3.3")  # str转float
print(type(f2), f2)  # 输出 <class 'float'> 3.3

# int
i1 = int(10)
i2 = int("11")  # str转int
print(type(i2), i2)  # 输出 <class 'int'> 11
# 进制转换
# 10进制转2进制
print(bin(11))  # 输出 0b1011
# 2进制转10进制
print(int('0b1011', 2))  # 输出 11
# 10进制转8进制
print(oct(11))  # 输出 0o13
# 8进制转10进制
print(int('0o13', 8))  # 输出 11
# 10进制转16进制
print(hex(11))  # 输出 0xb
# 16进制转10进制
print(int('0xb', 16))  # 输出 11

# str
s1 = str("hello")
print(s1)
# str可以把任意类型都转换为字符串
s2 = str({"a": 1})
print(type(s2), s2)  # 输出 <class 'str'> {'a': 1}

# 内置方法
# 按索引取值
s3 = "hello world"
# 正向取
print(s3[0])
# 反向取
print(s3[-1])
# s3[0] = 'H' 字符串是不可变类型，索引不能修改值，只能取不能改

# 切片
print(s3[1:4])

# 切片+步长
# 正向
print(s3[0:5:2])  # 按步长每次加2取0 2 4
# 反向
print(s3[5:0:-2])  # 按步长每次-2，取5 3 1
# 字符串倒过来
print(s3[::-1])

# 长度len
print(len(s3))

# 成员运算符 in 和 not in
print("a" in "abc")
print("a" not in "abc")

# strip 移除空白
s4 = "***a*bc***"
print(s4.strip("*"))  # 默认去掉字符串左右两边的空格
print(s4.lstrip("*"))  # 只去掉左边
print(s4.rstrip("*"))  # 只去掉右边

# 切分 split 把字符串按分隔符切分 得到列表 默认分割符空格 从左往右
ls = "a:b:c".split(":")
print(ls)
# 指定切分次数
ls1 = "a:b:c".split(":", 1)
print(ls1)
# 从右往左切
print("a:b:c".rsplit(":", 1))

# 大小写转换 lower upper
print("aBCd".lower())
print("aBCd".upper())

# 判断字符串开头和结尾 startswith endswith
print("abcd".startswith("a"))
print("abcd".endswith("d"))

# join 把全为字符串的列表拼接为字符串
ls2=["a","b","c"]
print(":".join(ls2))

# replace 替换字符 三个参数 要替换的字符串 用于替换的字符串 替换几次(不写默认全部)
print("aabbcc".replace("a","d",1))

# isdigit 判断字符串是否全为数字 小数点也不行
print("OOP".isdigit())